#ifndef CKKS_SRC_CIPHERTEXT_H_
#define CKKS_SRC_CIPHERTEXT_H_

#include "common.h"

class Ciphertext {
public:
    uint64_t *bx;
    uint64_t *ax;

    long N; // /< Dimension of Ring

    long slots; // /< The length of plaintext vector

    long l; // /< The level of this ciphertext

    // __uint128_t scale;
    double scale;

    // 默认构造函数
    Ciphertext();

    // 构造函数
    Ciphertext(uint64_t *ax, uint64_t *bx, long N, long slots, long l, __uint128_t scale);

    Ciphertext(long N, long slots, long l, __uint128_t scale);
    
    // 拷贝构造函数
    Ciphertext(const Ciphertext &cipher);
    
    Ciphertext &operator = (const Ciphertext &o);

    // 移动构造函数
    Ciphertext(Ciphertext &&other) = default;
    Ciphertext &operator = (Ciphertext &&other) = default;


    void Print() const;
};

#endif
